package com.simplehire.controller;

import com.simplehire.service.DeepSeekService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import java.io.IOException;
import java.nio.charset.StandardCharsets;

@Controller
public class InterviewController {

    @Autowired
    private DeepSeekService deepSeekService;

    // 显示面试页面
    @GetMapping("/interview")
    public String showInterviewPage() {
        return "interview";
    }

    // 处理简历上传并生成面试问题
    @PostMapping("/interview/upload")
    public String uploadResume(@RequestParam("resumeFile") MultipartFile file, RedirectAttributes redirectAttributes) {
        try {
            // 检查文件是否为空
            if (file.isEmpty()) {
                throw new IllegalArgumentException("请选择一个文件上传");
            }

            // 检查文件大小（10MB限制）
            if (file.getSize() > 10 * 1024 * 1024) {
                throw new IllegalArgumentException("文件大小不能超过10MB");
            }

            // 检查文件类型（支持TXT、PDF、DOCX）
            String contentType = file.getContentType();
            if (contentType == null ||
                    (!contentType.contains("text/plain") &&
                            !contentType.contains("application/pdf") &&
                            !contentType.contains("application/vnd.openxmlformats-officedocument.wordprocessingml.document"))) {
                throw new IllegalArgumentException("仅支持TXT、PDF和DOCX格式的文件");
            }

            // 读取文件内容
            String resumeText = new String(file.getBytes(), StandardCharsets.UTF_8);

            // 验证简历内容不为空
            if (resumeText.trim().isEmpty()) {
                throw new IllegalArgumentException("上传的文件内容为空");
            }

            // 构建提示信息
            String prompt = String.format("""
                假设你是一位高级 Java 面试官,请根据以下简历内容生成3个相关面试问题,并模拟打分(满分100分),同时
                提供改进建议:
                简历内容:
                %s
                """, resumeText);

            // 调用AI服务生成面试问题
            String aiResponse = deepSeekService.sendPrompt(prompt);

            // 检查AI响应
            if (aiResponse == null || aiResponse.trim().isEmpty()) {
                throw new RuntimeException("生成面试问题失败，请重试");
            }

            // 传递结果到页面
            redirectAttributes.addFlashAttribute("aiResponse", aiResponse);
            redirectAttributes.addFlashAttribute("fileName", file.getOriginalFilename());
            return "redirect:/result"; // 跳转到结果页面

        } catch (IllegalArgumentException e) {
            redirectAttributes.addFlashAttribute("error", "文件处理错误: " + e.getMessage());
        } catch (IOException e) {
            redirectAttributes.addFlashAttribute("error", "读取文件时发生错误: " + e.getMessage());
        } catch (RuntimeException e) {
            redirectAttributes.addFlashAttribute("error", "生成面试问题失败: " + e.getMessage());
        } catch (Exception e) {
            // 捕获其他可能的异常
            redirectAttributes.addFlashAttribute("error", "系统错误: " + e.getMessage());
        }
        return "redirect:/interview"; // 在发生错误时返回到面试页面
    }

    // 添加结果页面映射
    @GetMapping("/result")
    public String showResultPage() {
        return "result";
    }
}